home *** CD-ROM | disk | FTP | other *** search
/ Windows Game Programming for Dummies (2nd Edition) / WinGamProgFD.iso / pc / DirectX SDK / DXSDK / samples / Multimedia / DirectShow / DMO / GargleDMO / Gargle.h < prev    next >
Encoding:
C/C++ Source or Header  |  2001-10-08  |  4.6 KB  |  170 lines

  1. //------------------------------------------------------------------------------
  2. // File: Gargle.h
  3. //
  4. // Desc: DirectShow sample code - definition of CGargle class.
  5. //
  6. // Copyright (c) 2000-2001 Microsoft Corporation. All rights reserved.
  7. //------------------------------------------------------------------------------
  8.  
  9.  
  10. #ifndef __GARGLE_H_
  11. #define __GARGLE_H_
  12.  
  13. #include "resource.h"       // main symbols
  14. #include "igargle.h"        // interface to us
  15.             
  16. // {458F93F3-4769-4370-8A7D-D055EE97679C}
  17. DEFINE_GUID(CLSID_Gargle, 
  18. 0x458f93f3, 0x4769, 0x4370, 0x8a, 0x7d, 0xd0, 0x55, 0xee, 0x97, 0x67, 0x9c);
  19.  
  20. // {3E7BB80F-2245-4483-ACC5-3A2EFDE0ACA6}
  21. DEFINE_GUID(CLSID_GargDMOProp, 
  22. 0x3e7bb80f, 0x2245, 0x4483, 0xac, 0xc5, 0x3a, 0x2e, 0xfd, 0xe0, 0xac, 0xa6);
  23.  
  24. enum GargleFilterParams
  25. {
  26.     GFP_Rate = 0,
  27.     GFP_Shape,
  28.     GFP_MAX
  29. };
  30.  
  31. /////////////////////////////////////////////////////////////////////////////
  32. // CGargle
  33. class ATL_NO_VTABLE CGargle : 
  34.     public CComObjectRootEx<CComMultiThreadModel>,
  35.     public CComCoClass<CGargle, &CLSID_Gargle>,
  36.     public CPCMDMO,
  37.     public ISpecifyPropertyPages,
  38.     public IPersistStream,
  39.     public IMediaObjectInPlace,
  40.     public CParamsManager,
  41.     public CParamsManager::UpdateCallback,
  42.     public IGargleDMOSample // property page uses this to talk to us
  43. {
  44. public:
  45.     CGargle();
  46.     HRESULT Init();
  47.  
  48. DECLARE_REGISTRY_RESOURCEID(IDR_GARGLE)
  49. DECLARE_GET_CONTROLLING_UNKNOWN()
  50.  
  51. DECLARE_PROTECT_FINAL_CONSTRUCT()
  52.  
  53. BEGIN_COM_MAP(CGargle)
  54.     COM_INTERFACE_ENTRY(IMediaObject)
  55.     COM_INTERFACE_ENTRY(IMediaObjectInPlace)
  56.     COM_INTERFACE_ENTRY(IMediaParams)
  57.     COM_INTERFACE_ENTRY(IMediaParamInfo)
  58.     COM_INTERFACE_ENTRY(ISpecifyPropertyPages)
  59.     COM_INTERFACE_ENTRY(IPersistStream)
  60.     COM_INTERFACE_ENTRY_IID(IID_IGargleDMOSample, IGargleDMOSample)
  61.     COM_INTERFACE_ENTRY_AGGREGATE(IID_IMarshal, m_pUnkMarshaler.p)
  62. END_COM_MAP()
  63.  
  64.     HRESULT FinalConstruct()
  65.     {
  66.         return CoCreateFreeThreadedMarshaler(
  67.             GetControllingUnknown(), &m_pUnkMarshaler.p);
  68.     }
  69.  
  70.     void FinalRelease()
  71.     {
  72.         m_pUnkMarshaler.Release();
  73.     }
  74.  
  75.     CComPtr<IUnknown> m_pUnkMarshaler;
  76.     
  77.     HRESULT FBRProcess(DWORD cSamples, BYTE *pIn, BYTE *pOut);
  78.  
  79.     // override
  80.     HRESULT Discontinuity();
  81.  
  82.     bool m_fDirty;
  83.  
  84.     // IGargleDMOSample
  85.     STDMETHOD(SetAllParameters)     (THIS_ LPCGargleFX);
  86.     STDMETHOD(GetAllParameters)     (THIS_ LPGargleFX);
  87.  
  88.     // IMediaObjectInPlace
  89.     STDMETHODIMP Process(THIS_ ULONG ulSize, BYTE *pData, REFERENCE_TIME rtStart, DWORD dwFlags);
  90.     STDMETHODIMP GetLatency(THIS_ REFERENCE_TIME *prt);
  91.     STDMETHODIMP Clone(IMediaObjectInPlace **pp); 
  92.  
  93.     // SetParam handling
  94.     STDMETHODIMP SetParam(DWORD dwParamIndex,MP_DATA value) { return SetParamInternal(dwParamIndex, value, false); }
  95.     HRESULT SetParamUpdate(DWORD dwParamIndex, MP_DATA value) { return SetParamInternal(dwParamIndex, value, true); }
  96.     HRESULT SetParamInternal(DWORD dwParamIndex, MP_DATA value, bool fSkipPasssingToParamManager);
  97.  
  98.     // ISpecifyPropertyPages
  99.     STDMETHODIMP GetPages(CAUUID * pPages);
  100.  
  101.     /* IPersist */
  102.     STDMETHODIMP GetClassID(THIS_ CLSID *pClassID);
  103.     
  104.     // IPersistStream
  105.     STDMETHOD(IsDirty)(void) { return m_fDirty ? S_OK : S_FALSE; }
  106.  
  107.     STDMETHOD(Load)(IStream *pStm) 
  108.     { 
  109.         ULONG cbRead;
  110.         HRESULT hr = S_OK;
  111.  
  112.         if (pStm==NULL)
  113.             return E_POINTER;
  114.  
  115.         GargleFX garglefx;
  116.         hr = pStm->Read((void *)&garglefx, sizeof(garglefx), &cbRead);
  117.         if (hr != S_OK || cbRead < sizeof(garglefx))
  118.             return E_FAIL;
  119.         hr = SetAllParameters(&garglefx);
  120.         m_fDirty = false;
  121.         return hr;
  122.     }
  123.  
  124.     STDMETHOD(Save)(IStream *pStm, BOOL fClearDirty) 
  125.     { 
  126.         HRESULT hr = S_OK; 
  127.  
  128.         if (pStm==NULL)
  129.             return E_POINTER;
  130.  
  131.         GargleFX garglefx;
  132.         hr = GetAllParameters(&garglefx);
  133.         if (FAILED(hr))
  134.             return hr;
  135.  
  136.         ULONG cbWritten;
  137.         hr = pStm->Write((void *)&garglefx, sizeof(garglefx), &cbWritten);
  138.         if (hr != S_OK || cbWritten < sizeof(garglefx))
  139.             return E_FAIL;
  140.  
  141.         if (fClearDirty)
  142.             m_fDirty = false;
  143.  
  144.         return S_OK;
  145.     }
  146.  
  147.     STDMETHOD(GetSizeMax)(ULARGE_INTEGER *pcbSize) 
  148.     { 
  149.         if (!pcbSize) 
  150.             return E_POINTER; 
  151.  
  152.         pcbSize->QuadPart = sizeof(GargleFX); 
  153.         return S_OK; 
  154.     }
  155.  
  156. private:
  157.    // gargle params
  158.    ULONG m_ulShape;
  159.    ULONG m_ulGargleFreqHz;
  160.  
  161.    // gargle state
  162.    ULONG m_ulPeriod;
  163.    ULONG m_ulPhase;
  164.  
  165.    BOOL m_bInitialized;
  166.  
  167. };
  168.  
  169. #endif //__GARGLE_H_
  170.